1e6553
@@ -190,8 +190,10 @@
public abstract class SjmsProducer extends DefaultAsyncProducer {
         void release(MessageProducerResources producer) throws Exception;
     }
 
-    protected class NOOPReleaseProducerCallback implements ReleaseProducerCallback {
-        public void release(MessageProducerResources producer) throws Exception { /* no-op */ }
+    protected class CloseProducerCallback implements ReleaseProducerCallback {
+        public void release(MessageProducerResources producer) throws Exception {
+            producer.getMessageProducer().close();
+        }
     }
 
     protected class ReturnProducerCallback implements ReleaseProducerCallback {
@@ -209,15 +211,15 @@
public abstract class SjmsProducer extends DefaultAsyncProducer {
         }
 
         try {
-            MessageProducerResources producer = null;
-            ReleaseProducerCallback releaseProducerCallback = null;
+            final MessageProducerResources producer;
+            final ReleaseProducerCallback releaseProducerCallback;
             if (isEndpointTransacted() && isSharedJMSSession()) {
                 Session session = exchange.getIn().getHeader(SjmsConstants.JMS_SESSION, Session.class);
                 if (session != null && session.getTransacted()) {
                     // Join existing transacted session - Synchronization must have been added
                     // by the session initiator
                     producer = doCreateProducerModel(session);
-                    releaseProducerCallback = new NOOPReleaseProducerCallback();
+                    releaseProducerCallback = new CloseProducerCallback();
                 } else {
                     // Propagate JMS session and register Synchronization as an initiator
                     producer = getProducers().borrowObject();
@@ -240,13 +242,11 @@
public abstract class SjmsProducer extends DefaultAsyncProducer {
                     if (log.isDebugEnabled()) {
                         log.debug("  Sending message asynchronously: {}", exchange.getIn().getBody());
                     }
-                    final MessageProducerResources finalProducer = producer;
-                    final ReleaseProducerCallback finalrpc = releaseProducerCallback;
                     getExecutor().execute(new Runnable() {
                         @Override
                         public void run() {
                             try {
-                                sendMessage(exchange, callback, finalProducer, finalrpc);
+                                sendMessage(exchange, callback, producer, releaseProducerCallback);
                             } catch (Exception e) {
                                 ObjectHelper.wrapRuntimeCamelException(e);
                             }
